N-ഗ്രാം ഭാഷാ മോഡലുകൾ എങ്ങനെ നടപ്പിലാക്കാമെന്ന് വിശദീകരിക്കുന്ന സമഗ്രമായ ഗൈഡ്. NLP-യുടെ പ്രധാന ആശയങ്ങൾ പഠിക്കുക.
NLP-യുടെ അടിത്തറ നിർമ്മിക്കുന്നു: N-ഗ്രാം ഭാഷാ മോഡൽ നടപ്പാക്കലിലേക്ക് ഒരു ആഴത്തിലുള്ള പഠനം
കൃത്രിമബുദ്ധി വ്യാപകമായ ഒരു കാലഘട്ടത്തിൽ, നമ്മുടെ കൈകളിലുള്ള സ്മാർട്ട് അസിസ്റ്റന്റുകൾ മുതൽ സെർച്ച് എഞ്ചിനുകൾക്ക് പിന്നിലെ സങ്കീർണ്ണമായ അൽഗോരിതങ്ങൾ വരെ, ഭാഷാ മോഡലുകളാണ് ഈ കണ്ടുപിടുത്തങ്ങളിൽ പലതിനെയും നയിക്കുന്ന അദൃശ്യ എഞ്ചിനുകൾ. നിങ്ങൾ ടൈപ്പ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന അടുത്ത വാക്ക് നിങ്ങളുടെ ഫോണിന് പ്രവചിക്കാൻ കഴിയുന്നതിനും വിവർത്തന സേവനങ്ങൾക്ക് ഒരു ഭാഷയെ മറ്റൊന്നിലേക്ക് അനായാസമായി മാറ്റാൻ കഴിയുന്നതിനും കാരണം അവയാണ്. എന്നാൽ ഈ മോഡലുകൾ യഥാർത്ഥത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നു? GPT പോലുള്ള സങ്കീർണ്ണമായ ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ വളർച്ചയ്ക്ക് മുമ്പ്, കമ്പ്യൂട്ടേഷണൽ ലിംഗ്വിസ്റ്റിക്സിന്റെ അടിത്തറ നിർമ്മിക്കപ്പെട്ടത് മനോഹരമായി ലളിതവും എന്നാൽ ശക്തവുമായ ഒരു സ്റ്റാറ്റിസ്റ്റിക്കൽ സമീപനത്തിലാണ്: N-ഗ്രാം മോഡൽ.
ഈ സമഗ്രമായ ഗൈഡ്, ലോകമെമ്പാടുമുള്ള ഡാറ്റാ ശാസ്ത്രജ്ഞർ, സോഫ്റ്റ്വെയർ എഞ്ചിനിയർമാർ, സാങ്കേതിക വിദ്യയിൽ താല്പര്യമുള്ളവർ എന്നിവരെ ലക്ഷ്യമിട്ടുള്ളതാണ്. N-ഗ്രാം ഭാഷാ മോഡലുകൾക്ക് പിന്നിലെ സിദ്ധാന്തം ലളിതമാക്കി, പൂജ്യത്തിൽ നിന്ന് എങ്ങനെ ഒരെണ്ണം നിർമ്മിക്കാമെന്ന് വിശദീകരിക്കുന്ന ഒരു പ്രായോഗിക, ഘട്ടം ഘട്ടമായുള്ള മാർഗ്ഗനിർദ്ദേശം ഞങ്ങൾ നൽകും. N-ഗ്രാമുകളെക്കുറിച്ച് മനസ്സിലാക്കുന്നത് ഒരു ചരിത്ര പാഠം മാത്രമല്ല; നാച്ചുറൽ ലാംഗ്വേജ് പ്രോസസ്സിംഗിൽ (NLP) ഒരു solid foundation നിർമ്മിക്കുന്നതിനുള്ള നിർണായക ഘട്ടം കൂടിയാണ്.
ഭാഷാ മോഡൽ എന്നാൽ എന്താണ്?
അതിൻ്റെ കാതലിൽ, ഒരു ഭാഷാ മോഡൽ (LM) എന്നത് വാക്കുകളുടെ ഒരു ശ്രേണിയിലുള്ള ഒരു പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷനാണ്. ലളിതമായ വാക്കുകളിൽ പറഞ്ഞാൽ, അതിൻ്റെ പ്രാഥമിക ചുമതല ഒരു അടിസ്ഥാന ചോദ്യത്തിന് ഉത്തരം നൽകുക എന്നതാണ്: ഒരു വാചക ശ്രേണി നൽകിയിട്ടുണ്ടെങ്കിൽ, ഏറ്റവും സാധ്യതയുള്ള അടുത്ത വാക്ക് ഏതാണ്?
വാചകം പരിഗണിക്കുക: "വിദ്യാർത്ഥികൾ അവരുടെ ___ തുറന്നു."
നന്നായി പരിശീലിപ്പിച്ച ഒരു ഭാഷാ മോഡൽ "പുസ്തകങ്ങൾ", "ലാപ്ടോപ്പുകൾ", അല്ലെങ്കിൽ "മനസ്സുകൾ" പോലുള്ള വാക്കുകൾക്ക് ഉയർന്ന പ്രോബബിലിറ്റി നൽകും, കൂടാതെ "ഫോട്ടോസിന്തസിസ്", "ആനകൾ", അല്ലെങ്കിൽ "ഹൈവേ" പോലുള്ള വാക്കുകൾക്ക് വളരെ കുറഞ്ഞ, പൂജ്യത്തിനടുത്ത് പ്രോബബിലിറ്റി നൽകും. വാക്കുകളുടെ ശ്രേണികളുടെ സാധ്യത അളക്കുന്നതിലൂടെ, ഭാഷാ മോഡലുകൾ യന്ത്രങ്ങൾക്ക് മനുഷ്യ ഭാഷ മനസ്സിലാക്കാനും സൃഷ്ടിക്കാനും വികസിപ്പിക്കാനും സഹായിക്കുന്നു.
അവയുടെ പ്രയോഗങ്ങൾ വിശാലവും നമ്മുടെ ദൈനംദിന ഡിജിറ്റൽ ജീവിതത്തിൽ സംയോജിതവുമാണ്, അവയിൽ:
- മെഷീൻ ട്രാൻസ്ലേഷൻ: ലക്ഷ്യ ഭാഷയിൽ ഔട്ട്പുട്ട് വാചകം സ്വാഭാവികവും വ്യാകരണപരമായി ശരിയുമാണെന്ന് ഉറപ്പാക്കുന്നു.
- സ്പീച്ച് റെക്കഗ്നിഷൻ: ശബ്ദപരമായി സമാനമായ വാചകങ്ങളെ വേർതിരിച്ചറിയുന്നു (ഉദാഹരണത്തിന്, "recognize speech" vs. "wreck a nice beach").
- പ്രെഡിക്റ്റീവ് ടെക്സ്റ്റ് & ഓട്ടോ കംപ്ലീറ്റ്: നിങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ അടുത്ത വാക്ക് അല്ലെങ്കിൽ വാചകം നിർദ്ദേശിക്കുന്നു.
- സ്പെൽ & ഗ്രാമർ തിരുത്തൽ: സ്റ്റാറ്റിസ്റ്റിക്കലായി സാധ്യതയില്ലാത്ത വാചക ശ്രേണികൾ തിരിച്ചറിയുകയും ഫ്ലാഗ് ചെയ്യുകയും ചെയ്യുന്നു.
N-ഗ്രാം പരിചയപ്പെടുത്തുന്നു: പ്രധാന ആശയം
ഒരു N-ഗ്രാം എന്നത് നൽകിയിട്ടുള്ള ടെക്സ്റ്റ് അല്ലെങ്കിൽ സംഭാഷണ സാമ്പിളിൽ നിന്ന് 'n' ഇനങ്ങളുടെ തുടർച്ചയായ ശ്രേണി മാത്രമാണ്. 'ഇനങ്ങൾ' സാധാരണയായി വാക്കുകളാണ്, പക്ഷേ അവ അക്ഷരങ്ങൾ, അക്ഷരങ്ങൾ, അല്ലെങ്കിൽ ഫോണിമുകൾ എന്നിവയും ആകാം. N-ഗ്രാമിലെ 'n' ഒരു സംഖ്യയെ പ്രതിനിധീകരിക്കുന്നു, ഇത് പ്രത്യേക പേരുകളിലേക്ക് നയിക്കുന്നു:
- യൂണിഗ്രാം (n=1): ഒരു വാക്ക്. (ഉദാഹരണത്തിന്, "The", "quick", "brown", "fox")
- ബിഗ്രാം (n=2): രണ്ട് വാക്കുകളുടെ ഒരു ശ്രേണി. (ഉദാഹരണത്തിന്, "The quick", "quick brown", "brown fox")
- ട്രിഗ്രാം (n=3): മൂന്ന് വാക്കുകളുടെ ഒരു ശ്രേണി. (ഉദാഹരണത്തിന്, "The quick brown", "quick brown fox")
ഒരു N-ഗ്രാം ഭാഷാ മോഡലിന് പിന്നിലെ അടിസ്ഥാന ആശയം, അതിന് മുമ്പുള്ള 'n-1' വാക്കുകളെ നോക്കിക്കൊണ്ട് ഒരു ശ്രേണിയിലെ അടുത്ത വാക്ക് പ്രവചിക്കാൻ കഴിയും എന്നതാണ്. ഒരു വാചകത്തിൻ്റെ പൂർണ്ണ വ്യാകരണവും അർത്ഥപരമായ സങ്കീർണ്ണതയും മനസ്സിലാക്കാൻ ശ്രമിക്കുന്നതിന് പകരം, പ്രശ്നത്തിൻ്റെ ബുദ്ധിമുട്ട് ഗണ്യമായി കുറയ്ക്കുന്ന ഒരു ലളിതമായ അനുമാനം ഞങ്ങൾ നടത്തുന്നു.
N-ഗ്രാമുകൾക്ക് പിന്നിലെ ഗണിതശാസ്ത്രം: പ്രോബബിലിറ്റിയും ലളിതമാക്കലും
ഒരു വാചകത്തിൻ്റെ (വാക്കുകളുടെ ശ്രേണി W = w₁, w₂, ..., wₖ) പ്രോബബിലിറ്റി ഔപചാരികമായി കണക്കാക്കാൻ, നമുക്ക് പ്രോബബിലിറ്റിയുടെ ചെയിൻ റൂൾ ഉപയോഗിക്കാം:
P(W) = P(w₁) * P(w₂|w₁) * P(w₃|w₁, w₂) * ... * P(wₖ|w₁, ..., wₖ₋₁)
ഈ ഫോർമുല പറയുന്നത്, മുഴുവൻ ശ്രേണിയുടെയും പ്രോബബിലിറ്റി എന്നത് ഓരോ വാക്കിൻ്റെയും കണ്ടീഷണൽ പ്രോബബിലിറ്റികളുടെ ഗുണനഫലമാണ്, അതിന് മുമ്പ് വന്ന എല്ലാ വാക്കുകളെയും ആശ്രയിച്ചിരിക്കുന്നു. ഗണിതശാസ്ത്രപരമായി ശരിയാണെങ്കിലും, ഈ സമീപനം പ്രായോഗികമല്ല. വളരെ ദൈർഘ്യമേറിയ മുൻകാല വാക്കുകളെ ആശ്രയിച്ചുള്ള ഒരു വാക്കിൻ്റെ പ്രോബബിലിറ്റി കണക്കാക്കുന്നത് (ഉദാഹരണത്തിന്, P(word | "The quick brown fox jumps over the lazy dog and then...")) വിശ്വസനീയമായ ഒരു കണക്ക് ലഭിക്കാൻ ആവശ്യമായത്ര ടെക്സ്റ്റ് ഡാറ്റയുടെ വലിയ അളവ് ആവശ്യമാകും.
മാർക്കോവ് അനുമാനം: ഒരു പ്രായോഗിക ലളിതമാക്കൽ
ഇവിടെയാണ് N-ഗ്രാം മോഡലുകൾ അവയുടെ ഏറ്റവും പ്രധാനപ്പെട്ട ആശയം അവതരിപ്പിക്കുന്നത്: മാർക്കോവ് അനുമാനം. ഈ അനുമാനം പറയുന്നത്, ഒരു വാക്കിൻ്റെ പ്രോബബിലിറ്റി നിശ്ചിത എണ്ണം മുമ്പുള്ള വാക്കുകളെ മാത്രം ആശ്രയിച്ചിരിക്കുന്നു എന്നതാണ്. ഉടനടി ഉള്ള സന്ദർഭം മതിയാകും എന്ന് ഞങ്ങൾ അനുമാനിക്കുന്നു, കൂടാതെ കൂടുതൽ ദൂരെയുള്ള ചരിത്രം ഞങ്ങൾ ഉപേക്ഷിക്കാം.
- ബിഗ്രാം മോഡലിന് (n=2), ഒരു വാക്കിൻ്റെ പ്രോബബിലിറ്റി അതിന് തൊട്ടുമുമ്പുള്ള ഒരൊറ്റ വാക്കിനെ മാത്രം ആശ്രയിച്ചിരിക്കുന്നു എന്ന് ഞങ്ങൾ അനുമാനിക്കുന്നു:
P(wᵢ | w₁, ..., wᵢ₋₁) ≈ P(wᵢ | wᵢ₋₁) - ട്രിഗ്രാം മോഡലിന് (n=3), അത് തൊട്ടുമുമ്പുള്ള രണ്ട് വാക്കുകളെ ആശ്രയിച്ചിരിക്കുന്നു എന്ന് ഞങ്ങൾ അനുമാനിക്കുന്നു:
P(wᵢ | w₁, ..., wᵢ₋₁) ≈ P(wᵢ | wᵢ₋₁, wᵢ₋₂)
ഈ അനുമാനം പ്രശ്നം കമ്പ്യൂട്ടേഷണലായി കൈകാര്യം ചെയ്യാൻ സാധ്യമാക്കുന്നു. അതിൻ്റെ പ്രോബബിലിറ്റി കണക്കാക്കാൻ ഞങ്ങൾ ഒരു വാക്കിൻ്റെ പൂർണ്ണമായ ചരിത്രം കാണേണ്ടതില്ല, അവസാനത്തെ n-1 വാക്കുകൾ മാത്രം മതി.
N-ഗ്രാം പ്രോബബിലിറ്റികൾ കണക്കാക്കുന്നു
മാർക്കോവ് അനുമാനം നിലവിലുണ്ടെങ്കിൽ, ഈ ലളിതമാക്കിയ പ്രോബബിലിറ്റികൾ എങ്ങനെ കണക്കാക്കാം? ഞങ്ങൾ മാക്സിമം ലൈക്ലിഹുഡ് എസ്റ്റിമേഷൻ (MLE) എന്നറിയപ്പെടുന്ന ഒരു രീതി ഉപയോഗിക്കുന്നു, ഇത് ഞങ്ങളുടെ ട്രെയിനിംഗ് ടെക്സ്റ്റിലെ (കോർപ്പസ്) കണക്കുകളിൽ നിന്ന് പ്രോബബിലിറ്റികൾ നേരിട്ട് ലഭിക്കുന്നു എന്ന് പറയുന്ന ഒരു ആകർഷകമായ മാർഗ്ഗമാണ്.
ഒരു ബിഗ്രാം മോഡലിന്, wᵢ₋₁ എന്ന വാക്കിന് ശേഷം wᵢ എന്ന വാക്ക് വരുന്ന പ്രോബബിലിറ്റി കണക്കാക്കുന്നത്:
P(wᵢ | wᵢ₋₁) = Count(wᵢ₋₁, wᵢ) / Count(wᵢ₋₁)
വാക്കുകളിൽ: A എന്ന വാക്ക് കണ്ടതിന് ശേഷം B എന്ന വാക്ക് കാണാനുള്ള പ്രോബബിലിറ്റി എന്നത് "A B" എന്ന ജോഡി കണ്ട എണ്ണത്തെ, "A" എന്ന വാക്ക് ആകെ കണ്ട എണ്ണം കൊണ്ട് ഹരിക്കുന്നതാണ്.
ഒരു ചെറിയ കോർപ്പസ് ഉദാഹരണമായി ഉപയോഗിക്കാം: "The cat sat. The dog sat."
- Count("The") = 2
- Count("cat") = 1
- Count("dog") = 1
- Count("sat") = 2
- Count("The cat") = 1
- Count("The dog") = 1
- Count("cat sat") = 1
- Count("dog sat") = 1
"The" എന്നതിന് ശേഷം "cat" വരാനുള്ള പ്രോബബിലിറ്റി എന്താണ്?
P("cat" | "The") = Count("The cat") / Count("The") = 1 / 2 = 0.5
"cat" എന്നതിന് ശേഷം "sat" വരാനുള്ള പ്രോബബിലിറ്റി എന്താണ്?
P("sat" | "cat") = Count("cat sat") / Count("cat") = 1 / 1 = 1.0
പൂജ്യത്തിൽ നിന്ന് ഘട്ടം ഘട്ടമായുള്ള നടപ്പാക്കൽ
ഇനി ഈ സിദ്ധാന്തത്തെ ഒരു പ്രായോഗിക നടപ്പാക്കലിലേക്ക് മാറ്റാം. ഭാഷാപരമായ രീതിയിൽ ഞങ്ങൾ ഘട്ടങ്ങൾ രൂപപ്പെടുത്തും, ഇത് പൈത്തൺ പോലുള്ള ഭാഷകളിലേക്ക് നേരിട്ട് മാപ്പ് ചെയ്യുന്നു.
ഘട്ടം 1: ഡാറ്റാ പ്രോസസ്സിംഗും ടോക്കണൈസേഷനും
എന്തെങ്കിലും എണ്ണുന്നതിനു മുമ്പ്, ഞങ്ങളുടെ ടെക്സ്റ്റ് കോർപ്പസ് തയ്യാറാക്കണം. ഞങ്ങളുടെ മോഡലിൻ്റെ ഗുണമേന്മയെ രൂപപ്പെടുത്തുന്ന ഒരു നിർണായക ഘട്ടമാണിത്.
- ടോക്കണൈസേഷൻ: വലിയൊരു ടെക്സ്റ്റ് ഭാഗത്തെ ചെറിയ യൂണിറ്റുകളായി വിഭജിക്കുന്ന പ്രക്രിയ, ടോക്കണുകൾ എന്ന് വിളിക്കുന്നു (നമ്മുടെ കാര്യത്തിൽ, വാക്കുകൾ). ഉദാഹരണത്തിന്, "The cat sat." എന്നത് ["The", "cat", "sat", "."] ആയി മാറും.
- ലോവർകേസിംഗ്: എല്ലാ ടെക്സ്റ്റും ലോവർകേസിലേക്ക് മാറ്റുന്നത് സാധാരണ രീതിയാണ്. "The" എന്നും "the" എന്നും രണ്ടു വ്യത്യസ്ത വാക്കുകളായി പരിഗണിച്ച് മോഡലിനെ ഇത് തടയുന്നു, ഇത് ഞങ്ങളുടെ കണക്കുകൾ ഏകീകരിക്കാനും മോഡൽ കൂടുതൽ ശക്തമാക്കാനും സഹായിക്കുന്നു.
- സ്റ്റാർട്ട് & സ്റ്റോപ്പ് ടോക്കണുകൾ ചേർക്കുന്നു: ഇത് ഒരു നിർണായക സാങ്കേതികവിദ്യയാണ്. ഓരോ വാചകത്തിൻ്റെയും തുടക്കത്തിലും അവസാനത്തിലും <s> (തുടക്കം), </s> (അവസാനം) പോലുള്ള പ്രത്യേക ടോക്കണുകൾ ഞങ്ങൾ ചേർക്കുന്നു. എന്തിനാണ് ഇത്? ഇത് വാചകത്തിൻ്റെ തുടക്കത്തിലുള്ള ഒരു വാക്കിൻ്റെ പ്രോബബിലിറ്റി (ഉദാഹരണത്തിന്, P("The" | <s>)) കണക്കാക്കാൻ മോഡലിനെ അനുവദിക്കുന്നു, കൂടാതെ ഒരു മുഴുവൻ വാചകത്തിൻ്റെയും പ്രോബബിലിറ്റി നിർവചിക്കാൻ സഹായിക്കുന്നു. ഞങ്ങളുടെ ഉദാഹരണ വാചകം "the cat sat." എന്നത് ["<s>", "the", "cat", "sat", ".", "</s>"] ആയി മാറും.
ഘട്ടം 2: N-ഗ്രാമുകൾ എണ്ണുന്നു
ഓരോ വാചകത്തിനും ശുദ്ധീകരിച്ച ടോക്കണുകളുടെ ലിസ്റ്റ് ലഭിച്ചുകഴിഞ്ഞാൽ, ഞങ്ങൾ കണക്കുകൾ ലഭിക്കാൻ ഞങ്ങളുടെ കോർപ്പസിലൂടെ കടന്നുപോകുന്നു. ഇതിനുള്ള ഏറ്റവും നല്ല ഡാറ്റാ ഘടന ഒരു ഡിക്ഷണറിയോ ഹാഷ് മാപ്പോ ആണ്, അവിടെ കീസ് N-ഗ്രാമുകളാണ് (ട്യൂപ്പിളുകളായി പ്രതിനിധീകരിക്കുന്നത്) മൂല്യങ്ങൾ അവയുടെ ഫ്രീക്വൻസികളാണ്.
ഒരു ബിഗ്രാം മോഡലിന്, രണ്ട് ഡിക്ഷണറികൾ ആവശ്യമാണ്:
unigram_counts: ഓരോ വ്യക്തിഗത വാക്കിൻ്റെയും ഫ്രീക്വൻസി സംഭരിക്കുന്നു.bigram_counts: ഓരോ രണ്ട്-വാക്ക് ശ്രേണിയുടെയും ഫ്രീക്വൻസി സംഭരിക്കുന്നു.
നിങ്ങളുടെ ടോക്കണൈസ് ചെയ്ത വാചകങ്ങളിലൂടെ നിങ്ങൾ ലൂപ്പ് ചെയ്യും. ["<s>", "the", "cat", "sat", "</s>"] പോലുള്ള ഒരു വാചകത്തിന്, നിങ്ങൾ ചെയ്യും:
- യൂണിഗ്രാമുകൾക്കുള്ള കൗണ്ട് വർദ്ധിപ്പിക്കുക: "<s>", "the", "cat", "sat", "</s>".
- ബിഗ്രാമുകൾക്കുള്ള കൗണ്ട് വർദ്ധിപ്പിക്കുക: ("<s>", "the"), ("the", "cat"), ("cat", "sat"), ("sat", "</s>").
ഘട്ടം 3: പ്രോബബിലിറ്റികൾ കണക്കാക്കുന്നു
ഞങ്ങളുടെ കൗണ്ട് ഡിക്ഷണറികൾ പോപ്പുലേറ്റ് ചെയ്തുകഴിഞ്ഞാൽ, ഞങ്ങൾക്ക് ഇപ്പോൾ പ്രോബബിലിറ്റി മോഡൽ നിർമ്മിക്കാൻ കഴിയും. ഞങ്ങൾ ഈ പ്രോബബിലിറ്റികൾ മറ്റൊരു ഡിക്ഷണറിയിൽ സംഭരിക്കാം അല്ലെങ്കിൽ ആവശ്യമുള്ളപ്പോൾ കണക്കാക്കാം.
P(word₂ | word₁) കണക്കാക്കാൻ, നിങ്ങൾ bigram_counts[(word₁, word₂)] ഉം unigram_counts[word₁] ഉം റിട്രീവ് ചെയ്യുകയും ഡിവിഷൻ നടത്തുകയും ചെയ്യും. എല്ലാ സാധ്യമായ പ്രോബബിലിറ്റികളും മുൻകൂട്ടി കണക്കാക്കി വേഗത്തിലുള്ള ലുക്കപ്പുകൾക്കായി സംഭരിക്കുന്നത് ഒരു നല്ല സമ്പ്രദായമാണ്.
ഘട്ടം 4: ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യുന്നു (ഒരു രസകരമായ പ്രയോഗം)
നിങ്ങളുടെ മോഡൽ ടെസ്റ്റ് ചെയ്യാനുള്ള ഒരു മികച്ച മാർഗ്ഗം പുതിയ ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ അതിനോട് ആവശ്യപ്പെടുക എന്നതാണ്. പ്രക്രിയ താഴെ പറയുന്ന രീതിയിൽ പ്രവർത്തിക്കുന്നു:
- ഒരു പ്രാരംഭ സന്ദർഭത്തോടെ ആരംഭിക്കുക, ഉദാഹരണത്തിന്, സ്റ്റാർട്ട് ടോക്കൺ <s>.
- <s> ൽ ആരംഭിക്കുന്ന എല്ലാ ബിഗ്രാമുകളും അവയുടെ അനുബന്ധ പ്രോബബിലിറ്റികളും കണ്ടെത്തുക.
- ഈ പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷൻ അടിസ്ഥാനമാക്കി അടുത്ത വാക്ക് യാദൃച്ഛികമായി തിരഞ്ഞെടുക്കുക (ഉയർന്ന പ്രോബബിലിറ്റിയുള്ള വാക്കുകൾ തിരഞ്ഞെടുക്കാൻ കൂടുതൽ സാധ്യതയുണ്ട്).
- നിങ്ങളുടെ സന്ദർഭം അപ്ഡേറ്റ് ചെയ്യുക. പുതിയതായി തിരഞ്ഞെടുത്ത വാക്ക് അടുത്ത ബിഗ്രാമിൻ്റെ ആദ്യ ഭാഗമാകും.
- ഒരു സ്റ്റോപ്പ് ടോക്കൺ </s> ജനറേറ്റ് ചെയ്യുകയോ അല്ലെങ്കിൽ ആവശ്യമുള്ള നീളം എത്തുകയോ ചെയ്യുന്നതുവരെ ഈ പ്രക്രിയ ആവർത്തിക്കുക.
ഒരു ലളിതമായ N-ഗ്രാം മോഡൽ ജനറേറ്റ് ചെയ്യുന്ന ടെക്സ്റ്റ് തികച്ചും cohérent ആയിരിക്കില്ല, പക്ഷേ ഇത് വ്യാകരണപരമായി സാധ്യമായ ചെറിയ വാചകങ്ങൾ ഉത്പാദിപ്പിക്കും, ഇത് അടിസ്ഥാനപരമായ വാക്ക്-ടു-വാക്ക് ബന്ധങ്ങൾ പഠിച്ചിട്ടുണ്ടെന്ന് പ്രകടമാക്കും.
സ്പാർസിറ്റിയുടെയും പരിഹാരത്തിൻ്റെയും പ്രശ്നം: സ്മൂത്തിംഗ്
പരിശീലന സമയത്ത് ഒരിക്കലും കണ്ടിട്ടില്ലാത്ത ഒരു ബിഗ്രാം ടെസ്റ്റിംഗ് സമയത്ത് നമ്മുടെ മോഡൽ കാണുമ്പോൾ എന്ത് സംഭവിക്കും? ഉദാഹരണത്തിന്, ഞങ്ങളുടെ ട്രെയിനിംഗ് കോർപ്പസ് ഒരിക്കലും "the purple dog" എന്ന വാചകം ഉൾപ്പെടുത്തിയിട്ടില്ലെങ്കിൽ:
Count("the", "purple") = 0
ഇതിനർത്ഥം P("purple" | "the") 0 ആയിരിക്കും. ഈ ബിഗ്രാം ഞങ്ങൾ വിലയിരുത്തുന്ന ഒരു നീണ്ട വാചകത്തിൻ്റെ ഭാഗമാണെങ്കിൽ, മുഴുവൻ വാചകത്തിൻ്റെയും പ്രോബബിലിറ്റി പൂജ്യം ആകും, കാരണം ഞങ്ങൾ എല്ലാ പ്രോബബിലിറ്റികളെയും ഒരുമിച്ച് ഗുണിക്കുകയാണ്. ഇത് സീറോ-പ്രോബബിലിറ്റി പ്രശ്നമാണ്, ഡാറ്റാ സ്പാർസിറ്റിയുടെ ഒരു പ്രകടനം. നമ്മുടെ ട്രെയിനിംഗ് കോർപ്പസ് സാധ്യമായ എല്ലാ സാധുവായ വാക്ക് കോമ്പിനേഷനുകളും ഉൾക്കൊള്ളുന്നു എന്ന് അനുമാനിക്കുന്നത് യാഥാർത്ഥ്യമല്ല.
ഇതിനുള്ള പരിഹാരം സ്മൂത്തിംഗ് ആണ്. സ്മൂത്തിംഗിൻ്റെ പ്രധാന ആശയം, ഞങ്ങൾ കണ്ടിട്ടുള്ള N-ഗ്രാമുകളിൽ നിന്ന് ഒരു ചെറിയ അളവിലുള്ള പ്രോബബിലിറ്റി മാസ് എടുത്ത് ഞങ്ങൾ കണ്ടിട്ടില്ലാത്ത N-ഗ്രാമുകളിലേക്ക് വിതരണം ചെയ്യുക എന്നതാണ്. ഇത് പൂജ്യം പ്രോബബിലിറ്റി ഉള്ള യാതൊരു വാക്ക് ശ്രേണിയും ഇല്ലെന്ന് ഉറപ്പാക്കുന്നു.
ലാപ്ലേസ് (ആഡ്-വൺ) സ്മൂത്തിംഗ്
ഏറ്റവും ലളിതമായ സ്മൂത്തിംഗ് ടെക്നിക് ലാപ്ലേസ് സ്മൂത്തിംഗ് ആണ്, ഇത് ആഡ്-വൺ സ്മൂത്തിംഗ് എന്നും അറിയപ്പെടുന്നു. ആശയം വളരെ ലളിതമാണ്: ഞങ്ങൾ യഥാർത്ഥത്തിൽ കണ്ടതിനേക്കാൾ ഓരോ സാധ്യമായ N-ഗ്രാമും ഒരു തവണ കൂടി കണ്ടിട്ടുണ്ടെന്ന് ഞങ്ങൾ ഭാവന ചെയ്യുന്നു.
Numerator-ൻ്റെ കൗണ്ടിനോട് 1 കൂട്ടുന്നതിലൂടെ ഫോർമുലയിൽ ചെറിയ മാറ്റം വരുന്നു. പ്രോബബിലിറ്റികൾ ഇപ്പോഴും 1 ആയി സമ്മിംഗ് ചെയ്യുന്നത് ഉറപ്പാക്കാൻ, ഡിനോമിനേറ്ററിനോട് seluruh പദാവലിയുടെ വലുപ്പം (V) കൂട്ടുന്നു.
P_laplace(wᵢ | wᵢ₋₁) = (Count(wᵢ₋₁, wᵢ) + 1) / (Count(wᵢ₋₁) + V)
- ഗുണങ്ങൾ: നടപ്പിലാക്കാൻ വളരെ ലളിതവും പൂജ്യം പ്രോബബിലിറ്റികൾ ഇല്ലെന്ന് ഉറപ്പ് നൽകുന്നു.
- ദോഷങ്ങൾ: പ്രത്യേകിച്ച് വലിയ പദാവലികളുള്ളപ്പോൾ, കാണാത്ത സംഭവങ്ങൾക്ക് ഇത് പലപ്പോഴും അമിതമായ പ്രോബബിലിറ്റി നൽകുന്നു. ഇക്കാരണത്താൽ, ഇത് പലപ്പോഴും കൂടുതൽ നൂതനമായ രീതികളുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ പ്രായോഗികമായി മോശം പ്രകടനം കാഴ്ചവെക്കുന്നു.
ആഡ്-കെ സ്മൂത്തിംഗ്
ഒരു ചെറിയ മെച്ചപ്പെടുത്തൽ ആഡ്-കെ സ്മൂത്തിംഗ് ആണ്, ഇവിടെ 1 കൂട്ടുന്നതിന് പകരം, ഞങ്ങൾ ഒരു ചെറിയ ഭിന്നസംഖ്യാ മൂല്യം 'k' (ഉദാഹരണത്തിന്, 0.01) കൂട്ടുന്നു. ഇത് വളരെ വലിയ അളവിലുള്ള പ്രോബബിലിറ്റി മാസ് പുനർവിതരണം ചെയ്യുന്നതിൻ്റെ ഫലം ലഘൂകരിക്കുന്നു.
P_add_k(wᵢ | wᵢ₋₁) = (Count(wᵢ₋₁, wᵢ) + k) / (Count(wᵢ₋₁) + k*V)
ഇത് മെച്ചമാണെങ്കിലും, ഉചിതമായ 'k' കണ്ടെത്തുന്നത് ഒരു വെല്ലുവിളിയാണ്. ഗുഡ്-ട്യൂറിംഗ് സ്മൂത്തിംഗ്, നെസർ-നെ സ്മൂത്തിംഗ് പോലുള്ള കൂടുതൽ നൂതനമായ വിദ്യകൾ നിലവിലുണ്ട്, കൂടാതെ പല NLP ടൂൾകിറ്റുകളിലും സാധാരണമാണ്, ഇത് കാണാത്ത സംഭവങ്ങളുടെ പ്രോബബിലിറ്റി കണക്കാക്കാൻ വളരെ സങ്കീർണ്ണമായ മാർഗ്ഗങ്ങൾ നൽകുന്നു.
ഒരു ഭാഷാ മോഡലിനെ വിലയിരുത്തുന്നു: പെർപ്ലക്സിറ്റി
ഞങ്ങളുടെ N-ഗ്രാം മോഡൽ നല്ലതാണോ എന്ന് ഞങ്ങൾ എങ്ങനെ അറിയും? അതോ ഒരു ട്രിഗ്രാം മോഡൽ ഞങ്ങളുടെ പ്രത്യേക ടാസ്ക്കിന് ബിഗ്രാം മോഡലിനേക്കാൾ മികച്ചതാണോ? വിലയിരുത്തലിനായി ഞങ്ങൾക്ക് ഒരു അളവെടുപ്പ് ആവശ്യമാണ്. ഭാഷാ മോഡലുകൾക്കുള്ള ഏറ്റവും സാധാരണ അളവ് പെർപ്ലക്സിറ്റി ആണ്.
പെർപ്ലക്സിറ്റി എന്നത് ഒരു സാമ്പിളിനെ എത്ര നന്നായി പ്രവചിക്കുന്ന ഒരു പ്രോബബിലിറ്റി മോഡലിൻ്റെ അളവാണ്. സഹജമായി, ഇത് മോഡലിൻ്റെ ഭാരമുള്ള ശരാശരി ശാഖാ ഘടകം ആയി കണക്കാക്കാം. ഒരു മോഡലിന് 50 പെർപ്ലക്സിറ്റി ഉണ്ടെങ്കിൽ, ഓരോ വാക്കിനും, 50 വ്യത്യസ്ത വാക്കുകളിൽ നിന്ന് ഏകപക്ഷീയമായി തിരഞ്ഞെടുക്കുന്നതുപോലെ മോഡൽ ആശയക്കുഴപ്പത്തിലാണ് എന്ന് അർത്ഥമാക്കുന്നു.
താഴ്ന്ന പെർപ്ലക്സിറ്റി സ്കോർ മികച്ചതാണ്, കാരണം ഇത് മോഡൽ ടെസ്റ്റ് ഡാറ്റയെക്കുറിച്ച് അത്രയധികം "ആശ്ചര്യപ്പെടുന്നില്ല" എന്നും യഥാർത്ഥത്തിൽ കാണുന്ന ശ്രേണികൾക്ക് ഉയർന്ന പ്രോബബിലിറ്റികൾ നൽകുന്നു എന്നും സൂചിപ്പിക്കുന്നു.
പെർപ്ലക്സിറ്റി ടെസ്റ്റ് സെറ്റിൻ്റെ വിപരീത പ്രോബബിലിറ്റിയായി കണക്കാക്കുന്നു, വാക്കുകളുടെ എണ്ണം കൊണ്ട് നോർമലൈസ് ചെയ്യുന്നു. എളുപ്പത്തിലുള്ള കമ്പ്യൂട്ടേഷനായി ഇത് പലപ്പോഴും അതിൻ്റെ ലോഗരിഥമിക് രൂപത്തിൽ പ്രതിനിധീകരിക്കുന്നു. നല്ല പ്രവചന ശക്തിയുള്ള ഒരു മോഡൽ ടെസ്റ്റ് വാചകങ്ങൾക്ക് ഉയർന്ന പ്രോബബിലിറ്റികൾ നൽകും, ഇത് കുറഞ്ഞ പെർപ്ലക്സിറ്റിക്ക് കാരണമാകും.
N-ഗ്രാം മോഡലുകളുടെ പരിമിതികൾ
അവയുടെ അടിസ്ഥാനപരമായ പ്രാധാന്യം ഉണ്ടായിരുന്നിട്ടും, N-ഗ്രാം മോഡലുകൾക്ക് കാര്യമായ പരിമിതികളുണ്ട്, ഇത് NLP ഫീൽഡിനെ കൂടുതൽ സങ്കീർണ്ണമായ ആർക്കിടെക്ചറുകളിലേക്ക് നയിച്ചിട്ടുണ്ട്:
- ഡാറ്റാ സ്പാർസിറ്റി: സ്മൂത്തിംഗ് ഉപയോഗിച്ചാലും, വലിയ N (ട്രൈഗ്രാം, 4-ഗ്രാം മുതലായവ) ആണെങ്കിൽ, സാധ്യമായ വാക്ക് കോമ്പിനേഷനുകളുടെ എണ്ണം കുതിച്ചുയരുന്നു. അവയിൽ മിക്കതിനും വിശ്വസനീയമായ പ്രോബബിലിറ്റികൾ കണക്കാക്കാൻ മതിയായ ഡാറ്റ ലഭിക്കുന്നത് അസാധ്യമാകും.
- സ്റ്റോറേജ്: മോഡൽ എല്ലാ N-ഗ്രാം കണക്കുകളും ഉൾക്കൊള്ളുന്നു. പദാവലിയും N ഉം വർദ്ധിക്കുന്നതിനനുസരിച്ച്, ഈ കണക്കുകൾ സംഭരിക്കാൻ ആവശ്യമായ മെമ്മറി വളരെ വലുതാകും.
- ദൂരവ്യാപകമായ ആശ്രിതത്വങ്ങൾ പകർത്താനുള്ള കഴിവില്ലായ്മ: ഇത് അവരുടെ ഏറ്റവും നിർണായകമായ കുറവാണ്. ഒരു N-ഗ്രാം മോഡലിന് വളരെ പരിമിതമായ മെമ്മറി ഉണ്ട്. ഒരു ട്രിഗ്രാം മോഡലിന്, ഉദാഹരണത്തിന്, മൂന്ന് സ്ഥാനങ്ങൾക്കപ്പുറം മുമ്പ് വന്ന ഒരു വാക്ക് മറ്റൊരു വാക്കിലേക്ക് ബന്ധിപ്പിക്കാൻ കഴിയില്ല. ഈ വാചകം പരിഗണിക്കുക: "The author, who wrote several best-selling novels and lived for decades in a small town in a remote country, speaks fluent ___." അവസാനത്തെ വാക്ക് പ്രവചിക്കാൻ ശ്രമിക്കുന്ന ഒരു ട്രിഗ്രാം മോഡൽ "speaks fluent" എന്ന സന്ദർഭം മാത്രമേ കാണൂ. "author" എന്ന വാക്കിനെക്കുറിച്ചോ സ്ഥാനത്തെക്കുറിച്ചോ അതിന് അറിവില്ല, അവ നിർണായക സൂചനകളാണ്. ദൂരെയുള്ള വാക്കുകൾക്കിടയിലുള്ള അർത്ഥപരമായ ബന്ധം ഇതിന് പകർത്താൻ കഴിയില്ല.
N-ഗ്രാമുകൾക്ക് അപ്പുറം: ന്യൂറൽ ഭാഷാ മോഡലുകളുടെ ഉദയം
ഈ പരിമിതികൾ, പ്രത്യേകിച്ച് ദൂരവ്യാപകമായ ആശ്രിതത്വങ്ങൾ കൈകാര്യം ചെയ്യാനുള്ള കഴിവില്ലായ്മ, ന്യൂറൽ ഭാഷാ മോഡലുകളുടെ വികസനത്തിന് വഴിയൊരുക്കി. Recurrent Neural Networks (RNNs), Long Short-Term Memory networks (LSTMs), ഏറ്റവും പ്രധാനമായി BERT, GPT പോലുള്ള മോഡലുകൾക്ക് ഊർജ്ജം നൽകുന്ന ഇപ്പോൾ ആധിപത്യം പുലർത്തുന്ന Transformers എന്നിവ പോലുള്ള ആർക്കിടെക്ചറുകൾ ഈ പ്രത്യേക പ്രശ്നങ്ങൾ മറികടക്കാൻ രൂപകൽപ്പന ചെയ്തവയാണ്.
സ്പാർസ് കണക്കുകളെ ആശ്രയിക്കുന്നതിന് പകരം, ന്യൂറൽ മോഡലുകൾ വാക്കുകളുടെ ഡെൻസ് വെക്റ്റർ പ്രതിനിധാനങ്ങൾ (embeddings) പഠിക്കുന്നു, അത് അർത്ഥപരമായ ബന്ധങ്ങൾ പകർത്തുന്നു. മനുഷ്യ ഭാഷയിൽ അന്തർലീനമായ സങ്കീർണ്ണവും ദൂരവ്യാപകവുമായ ആശ്രിതത്വങ്ങൾ മനസ്സിലാക്കാൻ അവ കൂടുതൽ ദൈർഘ്യമേറിയ ശ്രേണികളിൽ സന്ദർഭം ട്രാക്ക് ചെയ്യാൻ ആന്തരിക മെമ്മറി സംവിധാനങ്ങൾ ഉപയോഗിക്കുന്നു.
ഉപസംഹാരം: NLP-യുടെ ഒരു അടിത്തറ
ആധുനിക NLP വലിയ തോതിലുള്ള ന്യൂറൽ നെറ്റ്വർക്കുകളാൽ നയിക്കപ്പെടുന്നുണ്ടെങ്കിലും, N-ഗ്രാം മോഡൽ ഒരു അനിവാര്യമായ വിദ്യാഭ്യാസ ഉപകരണമായി നിലനിൽക്കുന്നു, കൂടാതെ പല ജോലികൾക്കും ആശ്ചര്യകരമാംവിധം ഫലപ്രദമായ ഒരു ബേസ്ലൈനായി തുടരുന്നു. ഇത് ഭാഷാ മോഡലിംഗിൻ്റെ പ്രധാന വെല്ലുവിളിയായ: ഭാവിയെ പ്രവചിക്കാൻ ഭൂതകാലത്തിലെ സ്റ്റാറ്റിസ്റ്റിക്കൽ പാറ്റേണുകൾ ഉപയോഗിക്കുന്നത് വ്യക്തവും, വ്യാഖ്യാനിക്കാവുന്നതും, കമ്പ്യൂട്ടേഷണലായി കാര്യക്ഷമവുമായ ഒരു പരിചയപ്പെടുത്തൽ നൽകുന്നു.
പൂജ്യത്തിൽ നിന്ന് ഒരു N-ഗ്രാം മോഡൽ നിർമ്മിക്കുന്നതിലൂടെ, NLP-യുടെ പശ്ചാത്തലത്തിൽ പ്രോബബിലിറ്റി, ഡാറ്റാ സ്പാർസിറ്റി, സ്മൂത്തിംഗ്, വിലയിരുത്തൽ എന്നിവയെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള, ആദ്യ-തത്വങ്ങൾ മനസ്സിലാക്കുന്നു. ഈ അറിവ് ചരിത്രപരമല്ല; ഇത് ആധുനിക AI-യുടെ ഗംഭീരമായ കെട്ടിടങ്ങൾ നിർമ്മിക്കപ്പെട്ട ആശയപരമായ അടിത്തറയാണ്. ഇത് ഭാഷയെ പ്രോബബിലിറ്റികളുടെ ഒരു ശ്രേണി ആയി കാണാൻ നിങ്ങളെ പഠിപ്പിക്കുന്നു - ഏത് ഭാഷാ മോഡലും, എത്ര സങ്കീർണ്ണമാണെങ്കിലും, മാസ്റ്റർ ചെയ്യാൻ അത്യാവശ്യമായ ഒരു കാഴ്ചപ്പാട്.